package cn.tedu.charging.device.canal;

import cn.tedu.charging.device.pojo.StationCanalPO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;

/**
 * 场站数据库数据和Redis数据同步处理器
 * 数据库表 charging_station 如果发生了变化 C create 创建 U update 更新 D delete 删除
 * 要通知 StationSyncHandler 处理器
 *
 * charging_station 插入了数据 C 通知 StationSyncHandler#insert 方法  在Redis插入数据
 * charging_station 更新了数据 U 通知 StationSyncHandler#update 方法  在Redis更新数据
 * charging_station 删除了数据 D 通知 StationSyncHandler#delete 方法  在Redis删除数据
 *
 *
 * @CanalTable("charging_station")
 */
@Slf4j
@Component
@CanalTable("charging_station")
public class StationSyncHandler implements EntryHandler<StationCanalPO> {

    /**
     * charging_station 插入了数据 C
     * 通知 StationSyncHandler#insert 方法  在Redis插入数据
     * @param stationCanalPO
     */
    @Override
    public void insert(StationCanalPO stationCanalPO) {
        log.debug("数据表 charging_station 插入了新的数据:{}", stationCanalPO);
        log.debug("通过RedisTemplate <插入> 场站的数据 ");
        EntryHandler.super.insert(stationCanalPO);
    }

    /**
     * charging_station 更新了数据 U
     * 通知 StationSyncHandler#update 方法  在Redis更新数据
     * @param before
     * @param after
     */
    @Override
    public void update(StationCanalPO before, StationCanalPO after) {
        log.debug("数据表 charging_station 更新了数据,更新之前:{}，更新之后:{}", before, after);
        log.debug("通过 RedisTemplate <更新> 场站的数据 ");
        EntryHandler.super.update(before, after);
    }

    /**
     * charging_station 删除了数据 D
     * 通知 StationSyncHandler#delete 方法  在Redis删除数据
     * @param stationCanalPO
     */
    @Override
    public void delete(StationCanalPO stationCanalPO) {
        log.debug("数据表 charging_station 删除了数据{}",stationCanalPO);
        log.debug("通过RedisTemplate <删除> 场站的数据 ");
        EntryHandler.super.delete(stationCanalPO);
    }
}
